package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.entity.YearSemesterEntity;
import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.ElectiveCoursePubEntity;
import com.tfjybj.itoo.teach.model.ElectiveCoursePubModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * ElectiveCoursePubService接口
 * electiveCoursePub表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface ElectiveCoursePubService extends BaseServicePlus<ElectiveCoursePubEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据课程_id模糊查询electiveCoursePub
     *
     * @param courseId 课程_id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的electiveCoursePub
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<ElectiveCoursePubEntity> queryByLikeCourseId(String courseId, Integer pageNo, Integer pageSize);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据课程ID和学年ID查询公选课培养计划
     *
     * @param courseId   课程ID
     * @param semesterId 学年ID
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/14 15:39
     */
    List<ElectiveCoursePubModel> queryByCoSeId(String courseId, String semesterId);

    /**
     * 根据学年学期ID分页查询公选课培养计划
     *
     * @param semesterId 学年学期ID
     * @param pageNo     页码
     * @param pageSize   每页条数
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-15 10:39:08
     */
    PageInfo<ElectiveCoursePubModel> queryAllBySemesterId(String semesterId, Integer pageNo, Integer pageSize);

    /**
     * 默认分页查询所有的公选课培养计划
     *
     * @param pageNo   页码
     * @param pageSize 每页条数
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-15 11:25:36
     */
    PageInfo<ElectiveCoursePubModel> queryAllEcpPlan(Integer pageNo, Integer pageSize);

    /**
     * 根据公选课培养计划ID查询公选课培养计划详情
     *
     * @param idList 公选课培养计划ID
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/15 19:11
     */
    List<ElectiveCoursePubModel> queryEcpPlanById(List<String> idList);

    /**
     * 查询所有的学年学期
     *
     * @return 学年学期实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/15 21:18
     */
    List<YearSemesterEntity> querySemester();

    /**
     * 根据学年学期ID查询公选课课程ID集合
     *
     * @param semesterId 学年学期Id
     * @return 公选课课程ID集合
     * @author 李建帅
     * @since 2.0.0 2018/11/18 8:22
     */
    List<String> queryCourseIdBySemesterId(String semesterId);

    /**
     * 根据课程名称模糊查询公选课培养计划
     *
     * @param strLike 模糊查询条件（课程名称）
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018/11/19 9:15
     */
    PageInfo<ElectiveCoursePubModel> queryByStrLike(Integer pageNo, Integer pageSize, String strLike);

    /**
     * 根据条件查询公选课培养计划
     *
     * @param semesterId 学期ID
     * @param academyId  学院Id
     * @return 公选课培养计划实体集合
     * @author 李建帅
     * @since 2.0.0 2018-11-19 10:28:18
     */
    PageInfo<ElectiveCoursePubModel> queryBySemAcaId(String semesterId, String academyId, Integer pageNo, Integer pageSize);

    /**
     * 下载培养计划模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 李建帅
     * @since 2.0.0 2018-11-15 08:53:53
     */
    boolean downLoadTemplate(HttpServletResponse response);

    /**
     * 批量导入
     *
     * @param
     * @return
     * @author 李建帅
     * @since 2.0.0 2018/11/15 14:33
     */
    ItooResult importTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 根据学年ID和课程id判断该培养计划是否已经存在
     *
     * @param semesterId 学年Id
     * @param courseId   课程Id
     * @return boolean 存在true/不存在false
     * @author 李建帅
     * @since 2.0.0 2018/11/24 15:29
     */
    Boolean findIdIsExist(String semesterId, String courseId);

    /**
     * 根据培养计划ID导出培养计划
     *
     * @param response response
     * @param idList   培养计划Id
     * @return 导出的结果
     * @author 李建帅
     * @since 2.0.0 2018-11-18 09:09:23
     */
    ItooResult exportByTpId(HttpServletResponse response, List<String> idList);

    /**
     * 根据条件导出培养计划
     *
     * @param response   响应
     * @param academyId  学院Id
     * @param semesterId 学期ID
     * @param strLike    模糊条件
     * @return 导出结果信息
     * @author 李建帅
     * @since 2.0.0 2018-11-25 11:34:25
     */
    ItooResult exportByStrLike(HttpServletResponse response, String academyId, String semesterId, String strLike);

    /**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 课程信息model
     * @author 李建帅
     * @since 2018-12-2 08:11:58
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);
}
